package LimitedTimeGame.Day_0208;

/**
 * @author zxc
 * @date 2023/02/08 10:45
 **/

/**
 * 题目 : 统计平方和三元组的个数
 * 题目详述 ：
 * 一个 平方和三元组(a,b,c)指的是满足 a2 + b2 = c2的 整数三元组a，b和c。
 * 给你一个整数n，请你返回满足1 <= a, b, c <= n的 平方和三元组 的数目。
 *
 * 提示：
 * 1 <= n <= 250
 *
 */
public class CountTriples {
    /**
     * 思路 ：
     * （枚举法）
     * 即，只需要去遍历a和b的平方 && 求取a平方和b平方的和
     * ===》 若是上述所求取的和 == 另一个c的平方;
     * @param n
     * @return
     */
    public int countTriples(int n) {
        // 变量sum，用来统计所有可能的三元组值;
        int sum = 0;
        // 遍历变量a和b，获取其所有的可能情况
        for(int i = 1 ; i < n ; i++){
            for(int j = 1 ; j < n ; j++){
                // 获取a的平方 + b的平方的值，对于上述所求取的值，求取其平方根;
                int k = (int)Math.sqrt(i * i + j * j);
                // 所获取的平方根满足以下两个条件 ：
                //（1）k <= n;（所求取的平方根，要小于等于n;）
                //（2）k * k = i * i + j * j;（所求取的平方根k ：满足 a2 + b2 = c2条件）
                if(k <= n && k * k == i * i + j * j){
                    sum++;
                }
            }
        }
        return sum;
    }
}
